import request from './request'

// ==================== 流失预测 API ====================

/**
 * 获取流失预测概览数据
 * @returns {Promise}
 */
export function getChurnOverview() {
  return request({
    url: '/prediction/api/churn/overview/',
    method: 'get'
  })
}

/**
 * 获取流失风险分布数据
 * @param {Object} params - 查询参数
 * @param {string} params.timeRange - 时间范围 (7d, 30d, 90d)
 * @returns {Promise}
 */
export function getChurnRiskDistribution(params = {}) {
  return request({
    url: '/prediction/api/churn/risk-distribution/',
    method: 'get',
    params
  })
}

/**
 * 获取流失趋势数据
 * @param {Object} params - 查询参数
 * @param {string} params.trendType - 趋势类型 (daily, weekly)
 * @returns {Promise}
 */
export function getChurnTrendData(params = {}) {
  return request({
    url: '/prediction/api/churn/trend-data/',
    method: 'get',
    params
  })
}

/**
 * 获取流失风险用户列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {string} params.searchKeyword - 搜索关键词
 * @param {string} params.riskLevelFilter - 风险等级过滤
 * @returns {Promise}
 */
export function getChurnRiskUsers(params = {}) {
  return request({
    url: '/prediction/api/churn/risk-users/',
    method: 'get',
    params
  })
}

/**
 * 执行流失预测
 * @returns {Promise}
 */
export function runChurnPrediction() {
  return request({
    url: '/prediction/api/churn/run-prediction/',
    method: 'post',
    timeout: 60000 // 设置60秒超时
  })
}

/**
 * 训练流失预测模型
 * @param {Object} data - 训练参数
 * @param {string} data.algorithm - 算法类型
 * @param {string} data.dataset - 数据集
 * @param {Object} data.training_params - 训练参数
 * @returns {Promise}
 */
export function trainChurnModel(data) {
  return request({
    url: '/prediction/api/churn/train-model/',
    method: 'post',
    data
  })
}

// ==================== 购买预测 API ====================

/**
 * 获取购买预测概览数据
 * @returns {Promise}
 */
export function getPurchaseOverview() {
  return request({
    url: '/prediction/api/purchase/overview/',
    method: 'get'
  })
}

/**
 * 获取购买时间分布数据
 * @param {Object} params - 查询参数
 * @param {string} params.timeRange - 时间范围 (7d, 30d, 90d)
 * @returns {Promise}
 */
export function getPurchaseTimeDistribution(params = {}) {
  return request({
    url: '/prediction/api/purchase/time-distribution/',
    method: 'get',
    params
  })
}

/**
 * 获取购买金额分布数据
 * @param {Object} params - 查询参数
 * @param {string} params.amountType - 金额类型 (individual, segment, category)
 * @returns {Promise}
 */
export function getPurchaseAmountDistribution(params = {}) {
  return request({
    url: '/prediction/api/purchase/amount-distribution/',
    method: 'get',
    params
  })
}

/**
 * 获取热门预测产品
 * @returns {Promise}
 */
export function getTopProducts() {
  return request({
    url: '/prediction/api/purchase/top-products/',
    method: 'get'
  })
}

/**
 * 获取购买预测用户列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.pageSize - 每页大小
 * @param {string} params.searchKeyword - 搜索关键词
 * @param {string} params.intentFilter - 意向等级过滤
 * @param {string} params.categoryFilter - 品类过滤
 * @returns {Promise}
 */
export function getPurchasePredictions(params = {}) {
  return request({
    url: '/prediction/api/purchase/predictions/',
    method: 'get',
    params
  })
}

/**
 * 执行购买预测
 * @returns {Promise}
 */
export function runPurchasePrediction() {
  return request({
    url: '/prediction/api/purchase/run-prediction/',
    method: 'post',
    timeout: 60000 // 设置60秒超时
  })
}

/**
 * 训练购买预测模型
 * @param {Object} data - 训练参数
 * @returns {Promise}
 */
export function trainPurchaseModel(data) {
  return request({
    url: '/prediction/api/purchase/train-model/',
    method: 'post',
    data
  })
}

// ==================== 通用预测 API ====================

/**
 * 获取模型列表
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export function getModelList(params = {}) {
  return request({
    url: '/prediction/api/models/',
    method: 'get',
    params
  })
}

/**
 * 获取模型详情
 * @param {number} modelId - 模型ID
 * @returns {Promise}
 */
export function getModelDetail(modelId) {
  return request({
    url: `/prediction/api/models/${modelId}/`,
    method: 'get'
  })
}

/**
 * 删除模型
 * @param {number} modelId - 模型ID
 * @returns {Promise}
 */
export function deleteModel(modelId) {
  return request({
    url: `/prediction/api/models/${modelId}/`,
    method: 'delete'
  })
}

/**
 * 获取预测历史
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export function getPredictionHistory(params = {}) {
  return request({
    url: '/prediction/api/history/',
    method: 'get',
    params
  })
}

/**
 * 单用户预测
 * @param {Object} data - 预测数据
 * @param {number} data.userId - 用户ID
 * @param {string} data.predictionType - 预测类型
 * @returns {Promise}
 */
export function predictSingleUser(data) {
  return request({
    url: '/prediction/api/predict/single/',
    method: 'post',
    data
  })
}

/**
 * 批量用户预测
 * @param {Object} data - 预测数据
 * @param {Array} data.userIds - 用户ID列表
 * @param {string} data.predictionType - 预测类型
 * @returns {Promise}
 */
export function predictBatchUsers(data) {
  return request({
    url: '/prediction/api/predict/batch/',
    method: 'post',
    data
  })
}

/**
 * 导出预测结果
 * @param {Object} params - 导出参数
 * @param {string} params.predictionType - 预测类型
 * @param {string} params.format - 导出格式
 * @returns {Promise}
 */
export function exportPredictionResults(params = {}) {
  return request({
    url: '/prediction/api/export/',
    method: 'get',
    params,
    responseType: 'blob'
  })
}
